const express = require('express');
const app = express();
const cors = require('cors');

const history = require('connect-history-api-fallback');
// 处理单页应用的路由  所有的路由都返回index.html
// localhost:5008/abc 没用 用这个 中间件的话会404 要localhost:5008才会 返回html
// 使用了 这个中件 localhost:5008/abc 也会返回html
app.use(history());

// 映射public目录中的静态资源
const path = require('path');
const staticRoot = path.resolve(__dirname, '../public');
app.use(express.static(staticRoot));

app.use(
  cors({
    origin(origin, callback) {
      if (!origin) {
        callback(null, '*');
        return;
      }
      callback(null, origin);
    },
    credentials: true,
  })
);

// 加入cookie-parser 中间件
// 加入之后，会在req对象中注入cookies属性，用于获取所有请求传递过来的cookie
// 加入之后，会在res对象中注入cookie方法，用于设置cookie
const cookieParser = require('cookie-parser');
app.use(cookieParser());

// 应用token中间件
app.use(require('./tokenMiddleware'));

// 解析 application/x-www-form-urlencoded 格式的请求体
app.use(express.urlencoded({ extended: true }));

// 解析 application/json 格式的请求体
app.use(express.json());

// 处理 api 的请求
app.use('/api/student', require('./api/student'));
// app.use("/api/book", require("./api/book"));
// app.use("/api/class", require("./api/class"));
app.use('/api/admin', require('./api/admin'));

// 处理错误的中间件
app.use(require('./errorMiddleware'));

const port = 5008;
app.listen(port, () => {
  console.log(`server listen on ${port}`);
});
